//
//  TYLanceSoldiers.m
//  AngerDragon
//
//  Created by gaotime_macbook_2 on 11-12-18.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "TYEnemyAbstractClass.h"

#import "TYStateSystemProtocol.h"
#import "TYLifeSystemProtocol.h"
#import "TYGuerdonSystemProtocol.h"
#import "TYDisplaySystemProtocol.h"
#import "TYAttackSystemProtocol.h"

#import "TYStateSystem.h"
#import "TYNPCLifeSystem.h"

#import "GameConfig.h"

@implementation TYEnemyAbstractClass

@synthesize m_display_system_protocol;
@synthesize m_attack_system_protocol;

- (id) init {
	
	if ((self = [super init]))
	{
		CCLOG(@"%@: %@", NSStringFromSelector(_cmd), self);
		
		/// 状态机系统不会变化, 所以在抽象类中进行挂接
		m_state_system_protocol = [[TYStateSystem alloc] init];
		/// 生命系统不会变化, 所以在抽象类中进行挂接
		m_life_system_protocol = [[TYNPCLifeSystem alloc] init];
		/// 奖励系统不会变化, 所以直接挂接

		
		/// 显示系统/攻击系统 会变化, 由子类来进行挂接
	}
	
	return self;
}

- (void) dealloc {
	CCLOG(@"%@: %@", NSStringFromSelector(_cmd), self);
	
	[(NSObject *)m_state_system_protocol release];
	[m_life_system_protocol deallocMe];
	[(NSObject *)m_guerdon_system_protocol release];
	[(NSObject *)m_display_system_protocol release];
	[(NSObject *)m_attack_system_protocol release];
	
	
	[super dealloc];
}

 

#pragma mark 实现被伤害接口
- (NSInteger) beHurt:(NSInteger) a_n_hurt_value {
	[m_life_system_protocol reduceLifeValue:a_n_hurt_value];
	
	/// 如果当前精灵被干掉了, 就更改状态机(这里使用一个通用状态机 kSpriteState_Dead, 因为要在抽象类中使用此状态)
	if ([m_life_system_protocol isDead]) {
		/// 释放当前精灵携带的各种奖励
		[m_guerdon_system_protocol putInPrizes:self.position];
		 
		/// 更改当前精灵的状态机, 为死亡状态
		[m_state_system_protocol setState:kSpriteState_Dead];
	}
	return 0;// 默认敌人的反伤是零, 如有有变化, 可以在具体子类中对此方法进行重写
} 

#pragma mark 实现碰撞接口
- (CGRect)getCollisionRect {
	/// 需要子类进行实现
	return CGRectMake(0, 0, 0, 0);
}

#pragma mark 实现AI接口
- (void)ai:(ccTime) delta {
	/// 需要子类进行实现
}

@end
